/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package commonlib.domain;

import java.util.*;
/**
 *
 * @param <E> és el tipus amb el que es representen els parells de paraules del corpus.
 * @author daniel.camacho.rodriguez
 */
public class Corpus <E extends ABPair> extends TreeSet<E> {

    /**
     *
     */
    public Corpus()
    {
        super();
    }
    /**
     *
     * @param totCorpus és el corpus sencer escrit en un sol String separant els infinitu de les seves nominalitzacións per espais i seprants cada parell per espais.
     */
    public void SetAllCorpus(String allCorpus)
    {
        String[] halfCorpus = allCorpus.split(" ");
        for (int i = 0; i < halfCorpus.length; i = i + 2 )
        {
            E pair = (E) new ABPair(halfCorpus[i],halfCorpus[i+1]);
            add(pair);
        }
    }

    /**
     *
     * @return retorna el corpus sencer, amb cada parell de verb i nominalització separada per espais, i separant parells per espais.
     */
    public String GetAllCorpus()
    {
        String allCorpus = new String();
        Iterator itCorp = this.iterator();
        while (itCorp.hasNext())
        {
            E pairIt = (E) itCorp.next();
            String alpha = pairIt.getAlpha();
            alpha = alpha.concat(" ");
            alpha = alpha.concat(pairIt.getBeta());
            alpha = alpha.concat(" ");
            allCorpus = allCorpus.concat(alpha);
        }
        allCorpus.trim();
        return allCorpus;
    }

    /**
     *
     * @param alpha és la paraula que es posara en el grup de les alphas.
     * @param beta és la paraula que es posara en el grup de les betas.
     */
    public void AddPair(String alpha, String beta){
        E pairAlphaBeta = (E) new ABPair(alpha,beta);
        this.add(pairAlphaBeta);
    }



    /**
     *
     * @param alpha és la paraula alpha del parell alpha beta.
     * @param beta és la paraula beta del parell alpha beta.
     * @return retorna true si el parell<alpha,beta> s'ha eliminat, retorna false altrement.
     */
    public boolean RemovePair(String alpha, String beta){
        E pairAlphaBeta = (E) new ABPair(alpha,beta);
        return this.remove(pairAlphaBeta);
    }


    /**
     *
     * @param alpha és la paraula alpha del parell alpha beta.
     * @param beta és la paraula beta del parell alpha beta.
     * @return retorna cert si el corpus de parells conte el parell <alpha,beta>.
     */
    public boolean SearchPair(String alpha, String beta){
        E pairAlphaBeta = (E) new ABPair(alpha,beta);
        return this.contains(pairAlphaBeta);
    }

    /**
     *
     * @param parell és el parell <alpha,beta>, que és vol modificar.
     * @param alpha es la nova alpha que es posara a l'antiga alpha.
     */
    public void ModifyAlpha(E pair, String alpha)
    {
        Iterator itCorp = this.iterator();
        boolean modify = false;
        while (itCorp.hasNext() && !modify)
        {
            E pairIt = (E) itCorp.next();
            if(pairIt.equals(pair)){
                this.remove(pairIt);
                pairIt.setAlpha(alpha);
                this.add(pairIt);
                modify = true;
            }
        }
    }

    /**
     *
     * @param parell és el parell <alpha,beta>, que és vol modificar.
     * @param beta es la nova beta que es posara a l'antiga beta.
     */
    public void ModifyBeta(E pair, String beta)
    {
        Iterator itCorp = this.iterator();
        boolean modify = false;
        while (itCorp.hasNext() && !modify)
        {
            E pairIt = (E) itCorp.next();
            if(pairIt.equals(pair)){
                this.remove(pairIt);
                pairIt.setBeta(beta);
                this.add(pairIt);
                modify = true;
            }
        }
    }

    /**
     *
     * @param parell és el parell <alpha,beta>, que és vol modificar.
     * @param alpha es la nova alpha que es posara a l'antiga alpha.
     * @param beta es la nova beta que es posara a l'antiga beta.
     */
    public void ModifyPair(E pair, String alpha, String beta)
    {
        Iterator itCorp = this.iterator();
        boolean modify = false;
        while (itCorp.hasNext() && !modify)
        {
            E pairIt = (E) itCorp.next();
            if(pairIt.equals(pair)){
                this.remove(pairIt);
                pairIt.setAlpha(alpha);
                pairIt.setBeta(beta);
                this.add(pairIt);
                modify = true;
            }
        }
    }
}
